home *** CD-ROM | disk | FTP | other *** search
- # Diese Zeile ist erforderlich, damit der Aufruf von 'dlist' in 'main'
- # den Compiler nicht verwirrt.
- forward dlist(path, prefix);
-
- # Einfache Testumgebung für den Makro 'dlist'
- main()
- { lprint("Bitte geben Sie den Namen des Wurzelordners ein:");
- wurzel = inputline();
- if ( wurzel != '' )
- { dlist(wurzel // '\*', '');
- }
- }
-
- # Dieser Makro gibt den Inhalt eines Ordners in das 'SCEleton-Fenster' aus. Dabei
- # werden auch alle Unterordner dieses Ordners angezeigt. Die Schachtelung wird durch
- # Einrückung kenntlich gemacht.
- # Dieser makro demonstriert die Verzeichnsfunktionen 'Fsfirst' und 'Fsnext'
- # sowie eine praktische Anwendung der Rekursion in SCEleton.
- dlist(path, prefix)
- {
- # Wenn 'prefix' leer ist, dann sind wir auf der obersten Ebene,
- # also Überschrift ausgeben.
- if ( prefix == '' )
- lprint("Dateibaum ab %s:", path);
-
- # Jetzt fängt die Suche nach passenden Dateien an.
- l = Fsfirst(path);
-
- # Zuerst testen, ob überhaupt etwas gefinden wurde.
- if ( l != $$$ )
- {
- # Falls ja, dann fängt die Suchschleife an.
- do
- {
- # Datum und Uhrzeit von Sekundenzahl in lesbaren Text wandeln.
- str = formattime(l[3], "%X %x");
-
- # Alle erhaltenen Informationen über die Datei ausgeben:
- # Namen, Ordnerkennung, Größe, Datum, Uhrzeit, Attribute.
- # Dabei wird dem Namen 'prefix' vorangestellt, um die Einrückung zu erzeugen.
- lprint("%-40s %1d %10d %17s %2x", prefix // l[0], l[1], l[2], str, l[4]);
-
- # Testen, ob die Datei ein Ordner war.
- if ( l[1] == 1 )
- {
- # Falls ja, den Namen an den Suchpfad anhängen, um diesen Ordner
- # durchsuchen zu können.
- l2 = splitname(path);
- l2[0] = l2[0] // '\' // l[0];
- p2 = makename(l2[0], l2[1], l2[2]);
-
- # Jetzt wird dieser Ordner durch einen rekursiven Selbstaufruf von 'dlist'
- # angezeigt. Dabei wird 'prefix' um ein Leerzeichen verlängert, damit der
- # Ordnerinhalt tiefer eingerückt ist.
- dlist(p2, prefix // ' ');
- }
-
- # Die nächste Datei im aktuellen Ordner suchen.
- l = Fsnext();
- }
- # Wenn die Rückgabe leer ist, dann gibt es nichts mehr.
- while ( l != $$$ );
- }
- # Falls wir auf der obersten Ebene sind, Ende der Liste anzeigen.
- if ( prefix == '' )
- lprint('*** Ende ***');
- }
-
-